#include <iostream>
#include <string>  //提供string类的定义等
#include <cstring> //这里的cstring相当于C语言中的string.h,负责提供常用函数的实现

int main()
{
    using namespace std;
    char charr1[30] = {"AQUAWIUS"};
    string name = {"ahahahahah"};
    // string类属于std命名空间内,请使用std::string或者using进行声明

    // 可以使用C语言风格初始化string对象
    // 可以使用cin将键盘输入到string对象中,使用cout将string直接输出
    // 可以使用string直接赋值的方式(和数组的方式相同)
    // 可以使用数组的方式直接访问存储在string类中的字符

    // string类的设计使得string可以自动调整string的长度

    cout << strlen(charr1) << "   " << name.length() << "   " << name.size() << endl;
    cout << name[4] << endl;
    cout << charr1[4] << endl;

    // 字面量输入赋值
    // 除了使用getline() get() 函数以外,
    // 字符串的链接
    std::string aqua_name1 = "aquawius";
    std::string aqua_name2 = "!";
    string aqua_name = aqua_name1 += aqua_name2;
    cout << aqua_name << endl;


    // 还可以使用字面量的形式赋值
    // C++中还有wchar_t,char16_t,char32_t等等char类型
    wchar_t title[] = L"This is wchat_t type of char";
    char16_t name_16[] = u"Aquawius NB!";
    char32_t name_32[] = U"Aquawius NB!";

    // 原始字符串(raw),字符表示的就是自己, 字符串加上 R,使用 "( 和 )" 作为界定符
    cout << R"(This is \"R type of\" string)" << endl; //输出: This is \"R type of\" string
    // 在raw中如果想使用 "()" 这种结构 请使用 R"+*( 和 )+*"进行表示
    cout << R"+*("(Who wouldn't?)")+*" << endl;

    return 0;
}